<?php

class router {
	private function getRoute() //получить маршрут .htaccess формирует ссылку таким образом что в параметры гет запроса попадает требуемый маршрут
    {
       $route = htmlspecialchars(addslashes($_GET['route']));
       $route = rtrim($route, "/");

	   if (empty($route))
       {
           $route = 'index';
	   }
		return $route;
    }

    private function getController()//получить контролер
	{
       $route=$this->getRoute();

       $sub_route=explode('/',$route);

       if ($sub_route['0']=='admin'){
           $path_contr = 'admin/controllers/';
           $controller= $path_contr. $sub_route['1'] . '.php';
       }
       else{
           $path_contr = 'core/controllers/';
           $controller= $path_contr. $route . '.php';
       }

	   if (!file_exists($controller)){
       header("HTTP/1.0 404 Not Found");
	   $controller= 'core/controllers/404' . '.php';
       }

	   return $controller;
       
    }
	 
	public function getView()//получить представление для контролера
	{
       $route=$this->getRoute();

        $sub_route=explode('/',$route);

        if ($sub_route['0']=='admin'){
            $path_view = 'admin/views/';
            $view= $path_view. $sub_route['1'] . '.php';
        }
        else{
            $path_view = 'core/views/';
            $view=$path_view. $route . '.php';
        }

	   if (!file_exists($view)){
       header("HTTP/1.0 404 Not Found");
	   $view= 'core/views/404'. '.php';
       }

       return $view;
    }
	 
	public function Run()// запуск процесса обработки данных
	{
	   //session::_session_init();
        session_start();

	   $controller=$this->getController();//получаем контролер

	   $cl=explode('.', $controller);

	   $cl=$cl[0]; //отбрасываем расширение, получаем только путь до контролера

       $name_contr=str_replace("/", "_", $cl);//заменяем в пути слеши на подчеркивания, таким образом получая название класса

	   $contr=new $name_contr;//создаем экземпляр класса контролера

       $contr->index();//запускаем контролер на выполнение (index() должна быть у любого контролера)

	   $member=$contr->member;//получаем переменные контролера

	   return $member;
	
	}
}
?>